2.4.1 Grundform des INNER JOIN
Wir rufen uns unser Beispiel wieder ins Gedächtnis. Mitarbeiter und Abteilungen sollen gemeinsam abgefragt werden und sind über das gemeinsame Attribut abteilung_ID zu verbinden. Wir wollen gleich einen Blick auf die fertige Anweisung werfen und die Erklärung nachliefern.
SELECT tbl_mitarbeiter.name, tbl_abteilung.abteilungsname FROM tbl_abteilung INNER JOIN tbl_mitarbeiter ON tbl_abteilung.abteilung_ID = tbl_mitarbeiter.abteilung_ID
Die erste Zeile bleibt gleich. Wir suchen den Nachnamen des Mitarbeiters und den Namen der Abteilung.
Die zweite und dritte Zeile zusammen geben an, welche Tabellen wie zu verbinden
sind. Prinzipiell sollte die Mastertabelle – also die mit dem Primärschlüssel
– in der FROM-Anweisung stehen.
Die ON-Anweisung enthält unsere Bedingung für den Vergleich und damit den Verbund.
Denn nur wenn Primär- und Fremdschlüssel übereinstimmen, gehören
Abteilung und Mitarbeiter auch wirklich zusammen.
Wir führen die Abfrage aus Abfrage ausführen und sehen das gleiche Ergebnis wie zuvor. Sie können nun die Anweisung verändern, z.B. die Reihenfolge oder Namen der Tabellen. Versuchen Sie nachzuvollziehen, was sich ändert.
Wie schon erwähnt ist vor jeden Spaltenbezeichner der
dazugehörige Tabellenbezeichner gesetzt worden – getrennt
durch einen Punkt. Tabellenbezeichner.Spaltenbezeichner
Damit weisen wir das Datenbank Managementsystem (DBMS) darauf hin, in welcher Tabelle die betreffende
Spalte zu suchen ist. Bei der Aufzählung der anzuzeigenden Spalten wäre
das noch nicht erforderlich gewesen, die Anweisung hätte auch wie
folgt funktioniert:
SELECT name, abteilungsname FROM tbl_abteilung INNER JOIN tbl_mitarbeiter ON tbl_abteilung.abteilung_ID = tbl_mitarbeiter.abteilung_ID
Das funktioniert aber auch nur so lange, wie die verwendeten
Spaltenbezeichner in nur einer der beiden Tabellen vorkommen. Die
Tabellen tbl_abteilung und tbl_mitarbeiter
enthalten dagegen beide die Spalte abteilung_ID,
und das zwingt uns, in der ON
- oder der WHERE
-Anweisung bei dieser Spalte die Tabellen explizit
anzugeben.